{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "initial_id",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-21T08:42:03.138542Z",
     "start_time": "2025-07-21T08:42:03.134542Z"
    }
   },
   "outputs": [],
   "source": [
    "#coding: utf-8"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "340896e8e69b942c",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "# 房价预测\n",
    "重点在于对于数据进行预处理，特别是数值型数字的平滑处理，因为回归模型对方差比较敏感"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "a5673b08f2a8df60",
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-07-21T08:42:03.900497Z",
     "start_time": "2025-07-21T08:42:03.139542Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "9835997ad7b3b2f3",
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-07-21T08:42:03.935109Z",
     "start_time": "2025-07-21T08:42:03.901496Z"
    }
   },
   "outputs": [],
   "source": [
    "train_df = pd.read_csv('input/train.csv',index_col=0)\n",
    "test_df = pd.read_csv('input/test.csv',index_col=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "60c1295f-370f-405e-93d4-e7f355fe5c27",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-21T08:42:03.953797Z",
     "start_time": "2025-07-21T08:42:03.936108Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "    MSSubClass MSZoning  LotFrontage  LotArea Street Alley LotShape  \\\nId                                                                    \n1           60       RL         65.0     8450   Pave   NaN      Reg   \n2           20       RL         80.0     9600   Pave   NaN      Reg   \n3           60       RL         68.0    11250   Pave   NaN      IR1   \n4           70       RL         60.0     9550   Pave   NaN      IR1   \n5           60       RL         84.0    14260   Pave   NaN      IR1   \n6           50       RL         85.0    14115   Pave   NaN      IR1   \n7           20       RL         75.0    10084   Pave   NaN      Reg   \n8           60       RL          NaN    10382   Pave   NaN      IR1   \n9           50       RM         51.0     6120   Pave   NaN      Reg   \n10         190       RL         50.0     7420   Pave   NaN      Reg   \n\n   LandContour Utilities LotConfig  ... PoolArea PoolQC  Fence MiscFeature  \\\nId                                  ...                                      \n1          Lvl    AllPub    Inside  ...        0    NaN    NaN         NaN   \n2          Lvl    AllPub       FR2  ...        0    NaN    NaN         NaN   \n3          Lvl    AllPub    Inside  ...        0    NaN    NaN         NaN   \n4          Lvl    AllPub    Corner  ...        0    NaN    NaN         NaN   \n5          Lvl    AllPub       FR2  ...        0    NaN    NaN         NaN   \n6          Lvl    AllPub    Inside  ...        0    NaN  MnPrv        Shed   \n7          Lvl    AllPub    Inside  ...        0    NaN    NaN         NaN   \n8          Lvl    AllPub    Corner  ...        0    NaN    NaN        Shed   \n9          Lvl    AllPub    Inside  ...        0    NaN    NaN         NaN   \n10         Lvl    AllPub    Corner  ...        0    NaN    NaN         NaN   \n\n   MiscVal MoSold  YrSold  SaleType  SaleCondition  SalePrice  \nId                                                             \n1        0      2    2008        WD         Normal     208500  \n2        0      5    2007        WD         Normal     181500  \n3        0      9    2008        WD         Normal     223500  \n4        0      2    2006        WD        Abnorml     140000  \n5        0     12    2008        WD         Normal     250000  \n6      700     10    2009        WD         Normal     143000  \n7        0      8    2007        WD         Normal     307000  \n8      350     11    2009        WD         Normal     200000  \n9        0      4    2008        WD        Abnorml     129900  \n10       0      1    2008        WD         Normal     118000  \n\n[10 rows x 80 columns]",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>MSSubClass</th>\n      <th>MSZoning</th>\n      <th>LotFrontage</th>\n      <th>LotArea</th>\n      <th>Street</th>\n      <th>Alley</th>\n      <th>LotShape</th>\n      <th>LandContour</th>\n      <th>Utilities</th>\n      <th>LotConfig</th>\n      <th>...</th>\n      <th>PoolArea</th>\n      <th>PoolQC</th>\n      <th>Fence</th>\n      <th>MiscFeature</th>\n      <th>MiscVal</th>\n      <th>MoSold</th>\n      <th>YrSold</th>\n      <th>SaleType</th>\n      <th>SaleCondition</th>\n      <th>SalePrice</th>\n    </tr>\n    <tr>\n      <th>Id</th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>1</th>\n      <td>60</td>\n      <td>RL</td>\n      <td>65.0</td>\n      <td>8450</td>\n      <td>Pave</td>\n      <td>NaN</td>\n      <td>Reg</td>\n      <td>Lvl</td>\n      <td>AllPub</td>\n      <td>Inside</td>\n      <td>...</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>2</td>\n      <td>2008</td>\n      <td>WD</td>\n      <td>Normal</td>\n      <td>208500</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>20</td>\n      <td>RL</td>\n      <td>80.0</td>\n      <td>9600</td>\n      <td>Pave</td>\n      <td>NaN</td>\n      <td>Reg</td>\n      <td>Lvl</td>\n      <td>AllPub</td>\n      <td>FR2</td>\n      <td>...</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>5</td>\n      <td>2007</td>\n      <td>WD</td>\n      <td>Normal</td>\n      <td>181500</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>60</td>\n      <td>RL</td>\n      <td>68.0</td>\n      <td>11250</td>\n      <td>Pave</td>\n      <td>NaN</td>\n      <td>IR1</td>\n      <td>Lvl</td>\n      <td>AllPub</td>\n      <td>Inside</td>\n      <td>...</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>9</td>\n      <td>2008</td>\n      <td>WD</td>\n      <td>Normal</td>\n      <td>223500</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>70</td>\n      <td>RL</td>\n      <td>60.0</td>\n      <td>9550</td>\n      <td>Pave</td>\n      <td>NaN</td>\n      <td>IR1</td>\n      <td>Lvl</td>\n      <td>AllPub</td>\n      <td>Corner</td>\n      <td>...</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>2</td>\n      <td>2006</td>\n      <td>WD</td>\n      <td>Abnorml</td>\n      <td>140000</td>\n    </tr>\n    <tr>\n      <th>5</th>\n      <td>60</td>\n      <td>RL</td>\n      <td>84.0</td>\n      <td>14260</td>\n      <td>Pave</td>\n      <td>NaN</td>\n      <td>IR1</td>\n      <td>Lvl</td>\n      <td>AllPub</td>\n      <td>FR2</td>\n      <td>...</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>12</td>\n      <td>2008</td>\n      <td>WD</td>\n      <td>Normal</td>\n      <td>250000</td>\n    </tr>\n    <tr>\n      <th>6</th>\n      <td>50</td>\n      <td>RL</td>\n      <td>85.0</td>\n      <td>14115</td>\n      <td>Pave</td>\n      <td>NaN</td>\n      <td>IR1</td>\n      <td>Lvl</td>\n      <td>AllPub</td>\n      <td>Inside</td>\n      <td>...</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>MnPrv</td>\n      <td>Shed</td>\n      <td>700</td>\n      <td>10</td>\n      <td>2009</td>\n      <td>WD</td>\n      <td>Normal</td>\n      <td>143000</td>\n    </tr>\n    <tr>\n      <th>7</th>\n      <td>20</td>\n      <td>RL</td>\n      <td>75.0</td>\n      <td>10084</td>\n      <td>Pave</td>\n      <td>NaN</td>\n      <td>Reg</td>\n      <td>Lvl</td>\n      <td>AllPub</td>\n      <td>Inside</td>\n      <td>...</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>8</td>\n      <td>2007</td>\n      <td>WD</td>\n      <td>Normal</td>\n      <td>307000</td>\n    </tr>\n    <tr>\n      <th>8</th>\n      <td>60</td>\n      <td>RL</td>\n      <td>NaN</td>\n      <td>10382</td>\n      <td>Pave</td>\n      <td>NaN</td>\n      <td>IR1</td>\n      <td>Lvl</td>\n      <td>AllPub</td>\n      <td>Corner</td>\n      <td>...</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>Shed</td>\n      <td>350</td>\n      <td>11</td>\n      <td>2009</td>\n      <td>WD</td>\n      <td>Normal</td>\n      <td>200000</td>\n    </tr>\n    <tr>\n      <th>9</th>\n      <td>50</td>\n      <td>RM</td>\n      <td>51.0</td>\n      <td>6120</td>\n      <td>Pave</td>\n      <td>NaN</td>\n      <td>Reg</td>\n      <td>Lvl</td>\n      <td>AllPub</td>\n      <td>Inside</td>\n      <td>...</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>4</td>\n      <td>2008</td>\n      <td>WD</td>\n      <td>Abnorml</td>\n      <td>129900</td>\n    </tr>\n    <tr>\n      <th>10</th>\n      <td>190</td>\n      <td>RL</td>\n      <td>50.0</td>\n      <td>7420</td>\n      <td>Pave</td>\n      <td>NaN</td>\n      <td>Reg</td>\n      <td>Lvl</td>\n      <td>AllPub</td>\n      <td>Corner</td>\n      <td>...</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>1</td>\n      <td>2008</td>\n      <td>WD</td>\n      <td>Normal</td>\n      <td>118000</td>\n    </tr>\n  </tbody>\n</table>\n<p>10 rows × 80 columns</p>\n</div>"
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_df.head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "source": [
    "# 将测试集和训练集一下"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "5a48cc8a3537d847"
  },
  {
   "cell_type": "markdown",
   "source": [],
   "metadata": {
    "collapsed": false
   },
   "id": "2a68b79a4fc1cd07"
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "array([[<Axes: title={'center': 'price'}>,\n        <Axes: title={'center': 'log(price + 1)'}>]], dtype=object)"
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 2 Axes>",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGxCAYAAABIjE2TAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABEnElEQVR4nO3df1yUZb4//tcIw82PgARyhklUKqyt0fJAktQGxg+PiVieE1u6ZSd3D61KsujHNE/rYAYu26q7uNnqsmKay25HcW0zY9gS14MWop6Ayu0HYiYjZcgPwZkRru8ffrlPIz9kYJi5Z3w9H4955H3d19z39Wbs5uV1zzWjEkIIEBERESnICFcPgIiIiOhqDChERESkOAwoREREpDgMKERERKQ4DChERESkOAwoREREpDgMKERERKQ4DChERESkOAwoREREpDgMKDSsxo0bh6efftrVwyC6rhUVFUGlUuHUqVPDfq4vvvgCkiTh8OHDDj3uqVOnoFKpUFRU5NDjOlNtbS0WLFiAKVOmICAgACqVCgcOHOjRr6mpCTfeeCP27Nnj9DEqCQMKDauSkhK8+OKLrh4GETnJ0qVLkZycjClTpjj0uOHh4Th8+DBmzJjh0OM609GjR7Fnzx6EhIQgMTGxz34jR47Ez3/+c/y///f/YLFYnDhCZWFAoWHR0dEBAJg0aRJuvfVWF4+GiJzhk08+wZ49e5CZmemwY3Z2dsJsNkOSJNx333246aabHHbsweieyelt5uNannzySZw9exZvv/02nnrqqX77Pvvsszh16hT++7//e5AjdX8MKNQng8EAlUqF48ePY/bs2QgKCkJwcDB+/OMf45tvvpH7jRs3Dqmpqdi9ezcmTZoEX19f5OTkyPuuvsVz4cIFLFmyBLfccgskScKoUaPw8MMP49NPP5X7WCwWrFmzBnfccQckScJNN92E//iP/7A5LxENzR//+Efcfffd8PX1RUhICB599FF88sknPfpt2bIF48ePhyRJuPPOO7Fz5048/fTTGDdunE2/TZs2QavVIjk52aY9ISEBer0e//jHP3DffffBz88PN998M1588UV0dnbK/bp/+efn52PNmjWIjIyEJEl4//33+7zF8+mnn+KJJ56ARqOBJEkYM2YMnnrqKZjNZrmPyWRCRkYGRo8eDR8fH0RGRiInJweXL18e+g/RDiNGDPxX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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "prices = pd.DataFrame({\"price\":train_df[\"SalePrice\"], \"log(price + 1)\":np.log1p(train_df[\"SalePrice\"])})\n",
    "prices.hist()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-07-21T08:42:04.224062Z",
     "start_time": "2025-07-21T08:42:03.955794Z"
    }
   },
   "id": "5ba6083686872b99",
   "execution_count": 5
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "y_train = np.log1p(train_df.SalePrice)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-07-21T08:42:04.229050Z",
     "start_time": "2025-07-21T08:42:04.225061Z"
    }
   },
   "id": "a3967512dff70143",
   "execution_count": 6
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "all_df = pd.concat((train_df,test_df), axis=0)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-07-21T08:42:04.236720Z",
     "start_time": "2025-07-21T08:42:04.230048Z"
    }
   },
   "id": "3aa756e1173a3958",
   "execution_count": 7
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "all_df.shape\n",
    "all_df['SalePrice'] \n",
    "all_df.drop(['SalePrice'], axis=1, inplace=True)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-07-21T08:42:04.243890Z",
     "start_time": "2025-07-21T08:42:04.237719Z"
    }
   },
   "id": "a3541374c7558c0a",
   "execution_count": 8
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "(1460,)"
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "all_df.shape\n",
    "y_train.shape"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-07-21T08:42:04.248883Z",
     "start_time": "2025-07-21T08:42:04.244889Z"
    }
   },
   "id": "35b45a6b3fd541f3",
   "execution_count": 9
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "Index(['MSZoning', 'Street', 'Alley', 'LotShape', 'LandContour', 'Utilities',\n       'LotConfig', 'LandSlope', 'Neighborhood', 'Condition1', 'Condition2',\n       'BldgType', 'HouseStyle', 'RoofStyle', 'RoofMatl', 'Exterior1st',\n       'Exterior2nd', 'MasVnrType', 'ExterQual', 'ExterCond', 'Foundation',\n       'BsmtQual', 'BsmtCond', 'BsmtExposure', 'BsmtFinType1', 'BsmtFinType2',\n       'Heating', 'HeatingQC', 'CentralAir', 'Electrical', 'KitchenQual',\n       'Functional', 'FireplaceQu', 'GarageType', 'GarageFinish', 'GarageQual',\n       'GarageCond', 'PavedDrive', 'PoolQC', 'Fence', 'MiscFeature',\n       'SaleType', 'SaleCondition'],\n      dtype='object')"
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 取出所有的object 列名\n",
    "all_object_cols = all_df.columns[all_df.dtypes == 'object']\n",
    "all_object_cols"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-07-21T08:42:04.254562Z",
     "start_time": "2025-07-21T08:42:04.249883Z"
    }
   },
   "id": "a49f8a086edd51ac",
   "execution_count": 10
  },
  {
   "cell_type": "markdown",
   "source": [
    "# 特征工程"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "65e12aa010beab8d"
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "    MSSubClass  LotFrontage  LotArea  OverallQual  OverallCond  YearBuilt  \\\nId                                                                          \n1           60         65.0     8450            7            5       2003   \n2           20         80.0     9600            6            8       1976   \n3           60         68.0    11250            7            5       2001   \n4           70         60.0     9550            7            5       1915   \n5           60         84.0    14260            8            5       2000   \n6           50         85.0    14115            5            5       1993   \n7           20         75.0    10084            8            5       2004   \n8           60          NaN    10382            7            6       1973   \n9           50         51.0     6120            7            5       1931   \n10         190         50.0     7420            5            6       1939   \n\n    YearRemodAdd  MasVnrArea  BsmtFinSF1  BsmtFinSF2  ...  SaleType_ConLw  \\\nId                                                    ...                   \n1           2003       196.0       706.0         0.0  ...           False   \n2           1976         0.0       978.0         0.0  ...           False   \n3           2002       162.0       486.0         0.0  ...           False   \n4           1970         0.0       216.0         0.0  ...           False   \n5           2000       350.0       655.0         0.0  ...           False   \n6           1995         0.0       732.0         0.0  ...           False   \n7           2005       186.0      1369.0         0.0  ...           False   \n8           1973       240.0       859.0        32.0  ...           False   \n9           1950         0.0         0.0         0.0  ...           False   \n10          1950         0.0       851.0         0.0  ...           False   \n\n    SaleType_New  SaleType_Oth  SaleType_WD  SaleCondition_Abnorml  \\\nId                                                                   \n1          False         False         True                  False   \n2          False         False         True                  False   \n3          False         False         True                  False   \n4          False         False         True                   True   \n5          False         False         True                  False   \n6          False         False         True                  False   \n7          False         False         True                  False   \n8          False         False         True                  False   \n9          False         False         True                   True   \n10         False         False         True                  False   \n\n    SaleCondition_AdjLand  SaleCondition_Alloca  SaleCondition_Family  \\\nId                                                                      \n1                   False                 False                 False   \n2                   False                 False                 False   \n3                   False                 False                 False   \n4                   False                 False                 False   \n5                   False                 False                 False   \n6                   False                 False                 False   \n7                   False                 False                 False   \n8                   False                 False                 False   \n9                   False                 False                 False   \n10                  False                 False                 False   \n\n    SaleCondition_Normal  SaleCondition_Partial  \nId                                               \n1                   True                  False  \n2                   True                  False  \n3                   True                  False  \n4                  False                  False  \n5                   True                  False  \n6                   True                  False  \n7                   True                  False  \n8                   True                  False  \n9                  False                  False  \n10                  True                  False  \n\n[10 rows x 287 columns]",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>MSSubClass</th>\n      <th>LotFrontage</th>\n      <th>LotArea</th>\n      <th>OverallQual</th>\n      <th>OverallCond</th>\n      <th>YearBuilt</th>\n      <th>YearRemodAdd</th>\n      <th>MasVnrArea</th>\n      <th>BsmtFinSF1</th>\n      <th>BsmtFinSF2</th>\n      <th>...</th>\n      <th>SaleType_ConLw</th>\n      <th>SaleType_New</th>\n      <th>SaleType_Oth</th>\n      <th>SaleType_WD</th>\n      <th>SaleCondition_Abnorml</th>\n      <th>SaleCondition_AdjLand</th>\n      <th>SaleCondition_Alloca</th>\n      <th>SaleCondition_Family</th>\n      <th>SaleCondition_Normal</th>\n      <th>SaleCondition_Partial</th>\n    </tr>\n    <tr>\n      <th>Id</th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>1</th>\n      <td>60</td>\n      <td>65.0</td>\n      <td>8450</td>\n      <td>7</td>\n      <td>5</td>\n      <td>2003</td>\n      <td>2003</td>\n      <td>196.0</td>\n      <td>706.0</td>\n      <td>0.0</td>\n      <td>...</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>20</td>\n      <td>80.0</td>\n      <td>9600</td>\n      <td>6</td>\n      <td>8</td>\n      <td>1976</td>\n      <td>1976</td>\n      <td>0.0</td>\n      <td>978.0</td>\n      <td>0.0</td>\n      <td>...</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>60</td>\n      <td>68.0</td>\n      <td>11250</td>\n      <td>7</td>\n      <td>5</td>\n      <td>2001</td>\n      <td>2002</td>\n      <td>162.0</td>\n      <td>486.0</td>\n      <td>0.0</td>\n      <td>...</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>70</td>\n      <td>60.0</td>\n      <td>9550</td>\n      <td>7</td>\n      <td>5</td>\n      <td>1915</td>\n      <td>1970</td>\n      <td>0.0</td>\n      <td>216.0</td>\n      <td>0.0</td>\n      <td>...</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>5</th>\n      <td>60</td>\n      <td>84.0</td>\n      <td>14260</td>\n      <td>8</td>\n      <td>5</td>\n      <td>2000</td>\n      <td>2000</td>\n      <td>350.0</td>\n      <td>655.0</td>\n      <td>0.0</td>\n      <td>...</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>6</th>\n      <td>50</td>\n      <td>85.0</td>\n      <td>14115</td>\n      <td>5</td>\n      <td>5</td>\n      <td>1993</td>\n      <td>1995</td>\n      <td>0.0</td>\n      <td>732.0</td>\n      <td>0.0</td>\n      <td>...</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>7</th>\n      <td>20</td>\n      <td>75.0</td>\n      <td>10084</td>\n      <td>8</td>\n      <td>5</td>\n      <td>2004</td>\n      <td>2005</td>\n      <td>186.0</td>\n      <td>1369.0</td>\n      <td>0.0</td>\n      <td>...</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>8</th>\n      <td>60</td>\n      <td>NaN</td>\n      <td>10382</td>\n      <td>7</td>\n      <td>6</td>\n      <td>1973</td>\n      <td>1973</td>\n      <td>240.0</td>\n      <td>859.0</td>\n      <td>32.0</td>\n      <td>...</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>9</th>\n      <td>50</td>\n      <td>51.0</td>\n      <td>6120</td>\n      <td>7</td>\n      <td>5</td>\n      <td>1931</td>\n      <td>1950</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>...</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>10</th>\n      <td>190</td>\n      <td>50.0</td>\n      <td>7420</td>\n      <td>5</td>\n      <td>6</td>\n      <td>1939</td>\n      <td>1950</td>\n      <td>0.0</td>\n      <td>851.0</td>\n      <td>0.0</td>\n      <td>...</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n    </tr>\n  </tbody>\n</table>\n<p>10 rows × 287 columns</p>\n</div>"
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# one-hot编码\n",
    "all_dummy_df = pd.get_dummies(all_df)\n",
    "all_dummy_df.head(10)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-07-21T08:42:04.300754Z",
     "start_time": "2025-07-21T08:42:04.255562Z"
    }
   },
   "id": "2cecff0c669c9f05",
   "execution_count": 11
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "    LotFrontage  LotArea  OverallQual  OverallCond  YearBuilt  YearRemodAdd  \\\nId                                                                            \n1          65.0     8450            7            5       2003          2003   \n2          80.0     9600            6            8       1976          1976   \n3          68.0    11250            7            5       2001          2002   \n4          60.0     9550            7            5       1915          1970   \n5          84.0    14260            8            5       2000          2000   \n\n    MasVnrArea  BsmtFinSF1  BsmtFinSF2  BsmtUnfSF  ...  SaleType_ConLw  \\\nId                                                 ...                   \n1        196.0       706.0         0.0      150.0  ...           False   \n2          0.0       978.0         0.0      284.0  ...           False   \n3        162.0       486.0         0.0      434.0  ...           False   \n4          0.0       216.0         0.0      540.0  ...           False   \n5        350.0       655.0         0.0      490.0  ...           False   \n\n    SaleType_New  SaleType_Oth  SaleType_WD  SaleCondition_Abnorml  \\\nId                                                                   \n1          False         False         True                  False   \n2          False         False         True                  False   \n3          False         False         True                  False   \n4          False         False         True                   True   \n5          False         False         True                  False   \n\n    SaleCondition_AdjLand  SaleCondition_Alloca  SaleCondition_Family  \\\nId                                                                      \n1                   False                 False                 False   \n2                   False                 False                 False   \n3                   False                 False                 False   \n4                   False                 False                 False   \n5                   False                 False                 False   \n\n    SaleCondition_Normal  SaleCondition_Partial  \nId                                               \n1                   True                  False  \n2                   True                  False  \n3                   True                  False  \n4                  False                  False  \n5                   True                  False  \n\n[5 rows x 286 columns]",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>LotFrontage</th>\n      <th>LotArea</th>\n      <th>OverallQual</th>\n      <th>OverallCond</th>\n      <th>YearBuilt</th>\n      <th>YearRemodAdd</th>\n      <th>MasVnrArea</th>\n      <th>BsmtFinSF1</th>\n      <th>BsmtFinSF2</th>\n      <th>BsmtUnfSF</th>\n      <th>...</th>\n      <th>SaleType_ConLw</th>\n      <th>SaleType_New</th>\n      <th>SaleType_Oth</th>\n      <th>SaleType_WD</th>\n      <th>SaleCondition_Abnorml</th>\n      <th>SaleCondition_AdjLand</th>\n      <th>SaleCondition_Alloca</th>\n      <th>SaleCondition_Family</th>\n      <th>SaleCondition_Normal</th>\n      <th>SaleCondition_Partial</th>\n    </tr>\n    <tr>\n      <th>Id</th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>1</th>\n      <td>65.0</td>\n      <td>8450</td>\n      <td>7</td>\n      <td>5</td>\n      <td>2003</td>\n      <td>2003</td>\n      <td>196.0</td>\n      <td>706.0</td>\n      <td>0.0</td>\n      <td>150.0</td>\n      <td>...</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>80.0</td>\n      <td>9600</td>\n      <td>6</td>\n      <td>8</td>\n      <td>1976</td>\n      <td>1976</td>\n      <td>0.0</td>\n      <td>978.0</td>\n      <td>0.0</td>\n      <td>284.0</td>\n      <td>...</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>68.0</td>\n      <td>11250</td>\n      <td>7</td>\n      <td>5</td>\n      <td>2001</td>\n      <td>2002</td>\n      <td>162.0</td>\n      <td>486.0</td>\n      <td>0.0</td>\n      <td>434.0</td>\n      <td>...</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>60.0</td>\n      <td>9550</td>\n      <td>7</td>\n      <td>5</td>\n      <td>1915</td>\n      <td>1970</td>\n      <td>0.0</td>\n      <td>216.0</td>\n      <td>0.0</td>\n      <td>540.0</td>\n      <td>...</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>5</th>\n      <td>84.0</td>\n      <td>14260</td>\n      <td>8</td>\n      <td>5</td>\n      <td>2000</td>\n      <td>2000</td>\n      <td>350.0</td>\n      <td>655.0</td>\n      <td>0.0</td>\n      <td>490.0</td>\n      <td>...</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n    </tr>\n  </tbody>\n</table>\n<p>5 rows × 286 columns</p>\n</div>"
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.get_dummies(all_dummy_df['MSSubClass'], prefix='MSSubClass')\n",
    "all_dummy_df.drop(['MSSubClass'], axis=1, inplace=True)\n",
    "all_dummy_df.head()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-07-21T08:42:04.320489Z",
     "start_time": "2025-07-21T08:42:04.301754Z"
    }
   },
   "id": "a81a85f9ee3a90a1",
   "execution_count": 12
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 数值化处理"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "410c73b365d1acdc"
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "Index(['LotFrontage', 'LotArea', 'OverallQual', 'OverallCond', 'YearBuilt',\n       'YearRemodAdd', 'MasVnrArea', 'BsmtFinSF1', 'BsmtFinSF2', 'BsmtUnfSF',\n       'TotalBsmtSF', '1stFlrSF', '2ndFlrSF', 'LowQualFinSF', 'GrLivArea',\n       'BsmtFullBath', 'BsmtHalfBath', 'FullBath', 'HalfBath', 'BedroomAbvGr',\n       'KitchenAbvGr', 'TotRmsAbvGrd', 'Fireplaces', 'GarageYrBlt',\n       'GarageCars', 'GarageArea', 'WoodDeckSF', 'OpenPorchSF',\n       'EnclosedPorch', '3SsnPorch', 'ScreenPorch', 'PoolArea', 'MiscVal',\n       'MoSold', 'YrSold'],\n      dtype='object')"
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "all_df.drop(['MSSubClass'], axis=1, inplace=True)\n",
    "numeric_cols = all_df.columns[all_df.dtypes != 'object']\n",
    "numeric_cols"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-07-21T08:42:04.329634Z",
     "start_time": "2025-07-21T08:42:04.321489Z"
    }
   },
   "id": "66c87f51252f95fe",
   "execution_count": 13
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "    LotFrontage  LotArea  OverallQual  OverallCond  YearBuilt  YearRemodAdd  \\\nId                                                                            \n1          65.0     8450            7            5       2003          2003   \n2          80.0     9600            6            8       1976          1976   \n3          68.0    11250            7            5       2001          2002   \n4          60.0     9550            7            5       1915          1970   \n5          84.0    14260            8            5       2000          2000   \n\n    MasVnrArea  BsmtFinSF1  BsmtFinSF2  BsmtUnfSF  ...  SaleType_ConLw  \\\nId                                                 ...                   \n1        196.0       706.0         0.0      150.0  ...           False   \n2          0.0       978.0         0.0      284.0  ...           False   \n3        162.0       486.0         0.0      434.0  ...           False   \n4          0.0       216.0         0.0      540.0  ...           False   \n5        350.0       655.0         0.0      490.0  ...           False   \n\n    SaleType_New  SaleType_Oth  SaleType_WD  SaleCondition_Abnorml  \\\nId                                                                   \n1          False         False         True                  False   \n2          False         False         True                  False   \n3          False         False         True                  False   \n4          False         False         True                   True   \n5          False         False         True                  False   \n\n    SaleCondition_AdjLand  SaleCondition_Alloca  SaleCondition_Family  \\\nId                                                                      \n1                   False                 False                 False   \n2                   False                 False                 False   \n3                   False                 False                 False   \n4                   False                 False                 False   \n5                   False                 False                 False   \n\n    SaleCondition_Normal  SaleCondition_Partial  \nId                                               \n1                   True                  False  \n2                   True                  False  \n3                   True                  False  \n4                  False                  False  \n5                   True                  False  \n\n[5 rows x 286 columns]",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>LotFrontage</th>\n      <th>LotArea</th>\n      <th>OverallQual</th>\n      <th>OverallCond</th>\n      <th>YearBuilt</th>\n      <th>YearRemodAdd</th>\n      <th>MasVnrArea</th>\n      <th>BsmtFinSF1</th>\n      <th>BsmtFinSF2</th>\n      <th>BsmtUnfSF</th>\n      <th>...</th>\n      <th>SaleType_ConLw</th>\n      <th>SaleType_New</th>\n      <th>SaleType_Oth</th>\n      <th>SaleType_WD</th>\n      <th>SaleCondition_Abnorml</th>\n      <th>SaleCondition_AdjLand</th>\n      <th>SaleCondition_Alloca</th>\n      <th>SaleCondition_Family</th>\n      <th>SaleCondition_Normal</th>\n      <th>SaleCondition_Partial</th>\n    </tr>\n    <tr>\n      <th>Id</th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>1</th>\n      <td>65.0</td>\n      <td>8450</td>\n      <td>7</td>\n      <td>5</td>\n      <td>2003</td>\n      <td>2003</td>\n      <td>196.0</td>\n      <td>706.0</td>\n      <td>0.0</td>\n      <td>150.0</td>\n      <td>...</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>80.0</td>\n      <td>9600</td>\n      <td>6</td>\n      <td>8</td>\n      <td>1976</td>\n      <td>1976</td>\n      <td>0.0</td>\n      <td>978.0</td>\n      <td>0.0</td>\n      <td>284.0</td>\n      <td>...</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>68.0</td>\n      <td>11250</td>\n      <td>7</td>\n      <td>5</td>\n      <td>2001</td>\n      <td>2002</td>\n      <td>162.0</td>\n      <td>486.0</td>\n      <td>0.0</td>\n      <td>434.0</td>\n      <td>...</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>60.0</td>\n      <td>9550</td>\n      <td>7</td>\n      <td>5</td>\n      <td>1915</td>\n      <td>1970</td>\n      <td>0.0</td>\n      <td>216.0</td>\n      <td>0.0</td>\n      <td>540.0</td>\n      <td>...</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>5</th>\n      <td>84.0</td>\n      <td>14260</td>\n      <td>8</td>\n      <td>5</td>\n      <td>2000</td>\n      <td>2000</td>\n      <td>350.0</td>\n      <td>655.0</td>\n      <td>0.0</td>\n      <td>490.0</td>\n      <td>...</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n    </tr>\n  </tbody>\n</table>\n<p>5 rows × 286 columns</p>\n</div>"
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mean_cols = all_dummy_df.mean()\n",
    "all_dummy_df = all_dummy_df.fillna(mean_cols)\n",
    "all_dummy_df.head()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-07-21T08:42:04.399211Z",
     "start_time": "2025-07-21T08:42:04.330633Z"
    }
   },
   "id": "aaa10557c14d889c",
   "execution_count": 14
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "# 标准化数据\n",
    "numeric_col_means = all_dummy_df.loc[:, numeric_cols].mean()\n",
    "numeric_col_std = all_dummy_df.loc[:, numeric_cols].std()\n",
    "all_dummy_df.loc[:, numeric_cols] = (all_dummy_df.loc[:, numeric_cols] - numeric_col_means) / numeric_col_std"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-07-21T08:42:04.422293Z",
     "start_time": "2025-07-21T08:42:04.402206Z"
    }
   },
   "id": "b41c22260679ab4f",
   "execution_count": 15
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "    LotFrontage   LotArea  OverallQual  OverallCond  YearBuilt  YearRemodAdd  \\\nId                                                                             \n1     -0.202033 -0.217841     0.646073    -0.507197   1.046078      0.896679   \n2      0.501785 -0.072032    -0.063174     2.187904   0.154737     -0.395536   \n3     -0.061269  0.137173     0.646073    -0.507197   0.980053      0.848819   \n4     -0.436639 -0.078371     0.646073    -0.507197  -1.859033     -0.682695   \n5      0.689469  0.518814     1.355319    -0.507197   0.947040      0.753100   \n\n    MasVnrArea  BsmtFinSF1  BsmtFinSF2  BsmtUnfSF  ...  SaleType_ConLw  \\\nId                                                 ...                   \n1     0.525112    0.580807    -0.29308  -0.934702  ...           False   \n2    -0.572152    1.177910    -0.29308  -0.629788  ...           False   \n3     0.334770    0.097856    -0.29308  -0.288467  ...           False   \n4    -0.572152   -0.494856    -0.29308  -0.047266  ...           False   \n5     1.387248    0.468851    -0.29308  -0.161040  ...           False   \n\n    SaleType_New  SaleType_Oth  SaleType_WD  SaleCondition_Abnorml  \\\nId                                                                   \n1          False         False         True                  False   \n2          False         False         True                  False   \n3          False         False         True                  False   \n4          False         False         True                   True   \n5          False         False         True                  False   \n\n    SaleCondition_AdjLand  SaleCondition_Alloca  SaleCondition_Family  \\\nId                                                                      \n1                   False                 False                 False   \n2                   False                 False                 False   \n3                   False                 False                 False   \n4                   False                 False                 False   \n5                   False                 False                 False   \n\n    SaleCondition_Normal  SaleCondition_Partial  \nId                                               \n1                   True                  False  \n2                   True                  False  \n3                   True                  False  \n4                  False                  False  \n5                   True                  False  \n\n[5 rows x 286 columns]",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>LotFrontage</th>\n      <th>LotArea</th>\n      <th>OverallQual</th>\n      <th>OverallCond</th>\n      <th>YearBuilt</th>\n      <th>YearRemodAdd</th>\n      <th>MasVnrArea</th>\n      <th>BsmtFinSF1</th>\n      <th>BsmtFinSF2</th>\n      <th>BsmtUnfSF</th>\n      <th>...</th>\n      <th>SaleType_ConLw</th>\n      <th>SaleType_New</th>\n      <th>SaleType_Oth</th>\n      <th>SaleType_WD</th>\n      <th>SaleCondition_Abnorml</th>\n      <th>SaleCondition_AdjLand</th>\n      <th>SaleCondition_Alloca</th>\n      <th>SaleCondition_Family</th>\n      <th>SaleCondition_Normal</th>\n      <th>SaleCondition_Partial</th>\n    </tr>\n    <tr>\n      <th>Id</th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>1</th>\n      <td>-0.202033</td>\n      <td>-0.217841</td>\n      <td>0.646073</td>\n      <td>-0.507197</td>\n      <td>1.046078</td>\n      <td>0.896679</td>\n      <td>0.525112</td>\n      <td>0.580807</td>\n      <td>-0.29308</td>\n      <td>-0.934702</td>\n      <td>...</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>0.501785</td>\n      <td>-0.072032</td>\n      <td>-0.063174</td>\n      <td>2.187904</td>\n      <td>0.154737</td>\n      <td>-0.395536</td>\n      <td>-0.572152</td>\n      <td>1.177910</td>\n      <td>-0.29308</td>\n      <td>-0.629788</td>\n      <td>...</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>-0.061269</td>\n      <td>0.137173</td>\n      <td>0.646073</td>\n      <td>-0.507197</td>\n      <td>0.980053</td>\n      <td>0.848819</td>\n      <td>0.334770</td>\n      <td>0.097856</td>\n      <td>-0.29308</td>\n      <td>-0.288467</td>\n      <td>...</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>-0.436639</td>\n      <td>-0.078371</td>\n      <td>0.646073</td>\n      <td>-0.507197</td>\n      <td>-1.859033</td>\n      <td>-0.682695</td>\n      <td>-0.572152</td>\n      <td>-0.494856</td>\n      <td>-0.29308</td>\n      <td>-0.047266</td>\n      <td>...</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>5</th>\n      <td>0.689469</td>\n      <td>0.518814</td>\n      <td>1.355319</td>\n      <td>-0.507197</td>\n      <td>0.947040</td>\n      <td>0.753100</td>\n      <td>1.387248</td>\n      <td>0.468851</td>\n      <td>-0.29308</td>\n      <td>-0.161040</td>\n      <td>...</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n    </tr>\n  </tbody>\n</table>\n<p>5 rows × 286 columns</p>\n</div>"
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "all_dummy_df.head()\n"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-07-21T08:42:04.442719Z",
     "start_time": "2025-07-21T08:42:04.423293Z"
    }
   },
   "id": "c7dfc67f76debcc1",
   "execution_count": 16
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "LotFrontage         0\nBsmtExposure_Av     0\nBsmtFinType1_GLQ    0\nBsmtFinType1_BLQ    0\nBsmtFinType1_ALQ    0\nBsmtExposure_No     0\nBsmtExposure_Mn     0\nBsmtExposure_Gd     0\nBsmtCond_TA         0\nBsmtFinType1_Rec    0\ndtype: int64"
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "all_dummy_df.isnull().sum().sort_values(ascending=False).head(10)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-07-21T08:43:17.201248Z",
     "start_time": "2025-07-21T08:43:17.181174Z"
    }
   },
   "id": "d27082c4243d8890",
   "execution_count": 18
  },
  {
   "cell_type": "markdown",
   "source": [
    "# 建立模型"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "f52ae2be0cc71db2"
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 分割数据集"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "6eb53ca558ae0f0e"
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "dummy_train_df = all_dummy_df.loc[train_df.index]\n",
    "dummy_test_df = all_dummy_df.loc[test_df.index]\n"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-07-21T08:43:21.313531Z",
     "start_time": "2025-07-21T08:43:21.295470Z"
    }
   },
   "id": "1f517ee558983a9e",
   "execution_count": 19
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 训练模型"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "42167927122692e4"
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "Text(0.5, 1.0, 'Ridge')"
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 1 Axes>",
      "image/png": "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YQAArEGoMUlU5/BTG8NPAABYglBjEiYKAwBgLUKNSSLtTBQGAMBKhBqT+FY/sU8NAADWINSYhInCAABYi1BjEv9EYSo1AABYglBjEl+lpo1KDQAAliDUmIQdhQEAsBahxiRRLOkGAMBShBqTRFGpAQDAUoQak/g232P1EwAA1iDUmMThG36iUgMAgCUINSY5OfxEpQYAACsQakzimyjcSqgBAMAShBqTRDGnBgAASxFqTOLfUZg5NQAAWIJQYxKGnwAAsBahxiQnh5+o1AAAYAVCjUmiIjtDTRuVGgAArECoMYnDf5duQg0AAFYg1JjEd5fuVoafAACwBKHGJAw/AQBgLUKNSRh+AgDAWoQak/iXdFOpAQDAEoQakzg6h588hBoAACxBqDGJg833AACwFKHGJL5KDcNPAABYg1BjEkINAADWItSYxBnJ8BMAAFYi1JjEEREhiUoNAABWIdSYhOEnAACsRagxiS/UtLUbam/nVgkAAIRbn0LN2rVrlZaWpujoaGVnZ2v79u2nbVtVVaVFixZp0qRJstvtysvL6/Hcmzdvls1m04IFC07bpqioSDab7YznCidfqJGYVwMAgBWCDjVbtmxRXl6eCgoKtGvXLs2aNUtz585VeXl5t+09Ho+SkpJUUFCgKVOm9Hju/fv367777tOsWbNO2+btt99WcXGxPve5zwXb9ZDy7VMjSZ4ThBoAAMIt6FDz8MMPa/ny5brtttuUkZGhNWvWKCUlRevWreu2/fjx4/Xoo49q6dKlcrlcpz2v1+vVzTffrNWrV2vChAndtmlqatLNN9+s9evXa/jw4cF2PaSiOu/9JEker9fCngAAMDgFFWpaW1tVWlqq3NzcgOO5ubnauXPnWXWksLBQSUlJWr58+Wnb3HnnnZo3b56uvvrqXp3T4/GooaEh4BEqNpuNycIAAFgoMpjGtbW18nq9Sk5ODjienJys6urqPndix44devLJJ+V2u0/bZvPmzXrnnXf09ttv9/q8RUVFWr16dZ/7FSxnhF2tbe2EGgAALNCnicI2my3gd8MwuhzrrcbGRi1evFjr169XYmJit20qKip077336plnnlF0dHSvz71q1SrV19f7HxUVFX3qY2852IAPAADLBFWpSUxMVERERJeqTE1NTZfqTW999NFHKisr0/z58/3H2ts7QkFkZKT27dun3bt3q6am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1/uf51qb44orrtCrr76q999/X5L097//XW+++aa+9KUvSeI6h0JvrmlpaalOnDgR0GbMmDHKzMwMyXUfVHfpNlttba28Xq+Sk5MDjicnJ6u6utqiXg0chmEoPz9fV1xxhTIzMyXJf127u+b79+8Pex/PZZs3b9Y777yjt99+u8tzXGfzfPzxx1q3bp3y8/P17W9/W2+99ZbuueceOZ1OLV26lGttkvvvv1/19fVKT09XRESEvF6vHnzwQd10002S+DsdCr25ptXV1XI4HBo+fHiXNqH4niTUmMBmswX8bhhGl2MI3l133aV3331Xb775ZpfnuOZnp6KiQvfee69+//vfKzo6+rTtuM5nr729XTk5OXrooYckSVlZWXrvvfe0bt06LV261N+Oa312tmzZomeeeUabNm3SRRddJLfbrby8PI0ZM0a33HKLvx3X2Xx9uaahuu4MP52FxMRERUREdEmbNTU1XZIrgnP33Xdr69at+uMf/6ixY8f6j48aNUqSuOZnqbS0VDU1NcrOzlZkZKQiIyP1+uuv62c/+5kiIyP915LrfPZGjx6tyZMnBxzLyMhQeXm5JP5Om+Wb3/ymVq5cqRtvvFEXX3yxlixZom984xsqKiqSxHUOhd5c01GjRqm1tVVHjhw5bRszEWrOgsPhUHZ2tkpKSgKOl5SUaMaMGRb16txmGIbuuusuPf/883rttdeUlpYW8HxaWppGjRoVcM1bW1v1+uuvc82D8PnPf167d++W2+32P3JycnTzzTfL7XZrwoQJXGeTzJw5s8u2BO+//75SU1Ml8XfaLM3NzbLbA7/SIiIi/Eu6uc7m6801zc7OVlRUVECbqqoq/eMf/wjNdTd96vEg41vS/eSTTxp79uwx8vLyjCFDhhhlZWVWd+2c9PWvf91wuVzGn/70J6Oqqsr/aG5u9rf50Y9+ZLhcLuP55583du/ebdx0000syzTBqaufDIPrbJa33nrLiIyMNB588EHjgw8+MH71q18ZsbGxxjPPPONvw7U+e7fccotx3nnn+Zd0P//880ZiYqLxrW99y9+G6xy8xsZGY9euXcauXbsMScbDDz9s7Nq1y79tSW+u6YoVK4yxY8caf/jDH4x33nnH+Jd/+ReWdPdnjz/+uJGammo4HA5j2rRp/uXHCJ6kbh9PPfWUv017e7vxwAMPGKNGjTKcTqdx5ZVXGrt377au0wPEZ0MN19k8//u//2tkZmYaTqfTSE9PN4qLiwOe51qfvYaGBuPee+81xo0bZ0RHRxsTJkwwCgoKDI/H42/DdQ7eH//4x27/Tb7lllsMw+jdNT1+/Lhx1113GSNGjDBiYmKMa665xigvLw9Jf22GYRjm138AAADCizk1AABgQCDUAACAAYFQAwAABgRCDQAAGBAINQAAYEAg1AAAgAGBUAMAAAYEQg0AABgQCDUAAGBAINQAAIABgVADAAAGhP8fXezILEYP8oUAAAAASUVORK5CYII="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.linear_model import Ridge\n",
    "from sklearn.model_selection import cross_val_score\n",
    "\n",
    "x_train = dummy_train_df.values\n",
    "x_test = dummy_test_df.values\n",
    "\n",
    "alphas = np.logspace(-3,2,50)\n",
    "test_scores = []\n",
    "for alpha in alphas:\n",
    "    clf = Ridge(alpha=alpha)\n",
    "    test_score = np.sqrt(-cross_val_score(clf, x_train, y_train, cv=10, scoring='neg_mean_squared_error'))\n",
    "    test_scores.append(np.mean(test_score))\n",
    "\n",
    "plt.plot(alphas,test_scores)\n",
    "plt.title('Ridge')"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-07-21T08:43:35.109759Z",
     "start_time": "2025-07-21T08:43:23.938675Z"
    }
   },
   "id": "a77fd3a6340a4d96",
   "execution_count": 20
  },
  {
   "cell_type": "markdown",
   "source": [
    "## random forest"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "ba11cd6de2d5e9e6"
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "from sklearn.ensemble import RandomForestRegressor\n",
    "max_features = [0.1,0.3,0.5,0.7,0.9,.99]\n",
    "test_scores = []\n",
    "for max_feature in max_features:\n",
    "    clf = RandomForestRegressor(n_estimators=100, max_features=max_feature)\n",
    "    test_score = np.sqrt(-cross_val_score(clf, x_train, y_train, cv=10, scoring='neg_mean_squared_error'))\n",
    "    test_scores.append(np.mean(test_score))\n",
    "\n"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-07-21T08:52:00.935268Z",
     "start_time": "2025-07-21T08:50:05.637111Z"
    }
   },
   "id": "9b552525704f575c",
   "execution_count": 30
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "Text(0.5, 1.0, 'RandomForest')"
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 1 Axes>",
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(max_features, test_scores)\n",
    "plt.title('RandomForest')"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-07-21T08:52:01.074261Z",
     "start_time": "2025-07-21T08:52:00.936266Z"
    }
   },
   "id": "9adc48c7dfe50987",
   "execution_count": 31
  },
  {
   "cell_type": "markdown",
   "source": [
    "# stacking 集成"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "6d09ea33c7e498c9"
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "RandomForestRegressor(max_features=0.3, n_estimators=500)",
      "text/html": "<style>#sk-container-id-1 {color: black;background-color: white;}#sk-container-id-1 pre{padding: 0;}#sk-container-id-1 div.sk-toggleable {background-color: white;}#sk-container-id-1 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-1 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-1 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-1 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-1 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-1 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-1 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-1 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-1 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-1 div.sk-item {position: relative;z-index: 1;}#sk-container-id-1 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-1 div.sk-item::before, #sk-container-id-1 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-1 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-1 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-1 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-1 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-1 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-1 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-1 div.sk-label-container {text-align: center;}#sk-container-id-1 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-1 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>RandomForestRegressor(max_features=0.3, n_estimators=500)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">RandomForestRegressor</label><div class=\"sk-toggleable__content\"><pre>RandomForestRegressor(max_features=0.3, n_estimators=500)</pre></div></div></div></div></div>"
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ridge = Ridge(alpha=15)\n",
    "rf = RandomForestRegressor(n_estimators=500, max_features=0.3)\n",
    "\n",
    "ridge.fit(x_train, y_train)\n",
    "rf.fit(x_train, y_train)\n"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-07-21T08:45:37.686791Z",
     "start_time": "2025-07-21T08:45:31.314846Z"
    }
   },
   "id": "8f9017f673bb1952",
   "execution_count": 22
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "y_ridge = np.expm1(ridge.predict(x_test))\n",
    "y_rf = np.expm1(rf.predict(x_test))\n",
    "y_final = (y_ridge + y_rf)/2"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-07-21T08:45:37.848016Z",
     "start_time": "2025-07-21T08:45:37.687784Z"
    }
   },
   "id": "8124ec4736d608a2",
   "execution_count": 23
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "submission_df = pd.DataFrame({'Id':test_df.index, 'SalePrice':y_final})"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-07-21T08:45:37.852800Z",
     "start_time": "2025-07-21T08:45:37.849016Z"
    }
   },
   "id": "14975bfbf9132fde",
   "execution_count": 24
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "     Id      SalePrice\n0  1461  118877.963507\n1  1462  151442.489110\n2  1463  175134.858225\n3  1464  190960.725144\n4  1465  194118.222821",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>Id</th>\n      <th>SalePrice</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>1461</td>\n      <td>118877.963507</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>1462</td>\n      <td>151442.489110</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>1463</td>\n      <td>175134.858225</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>1464</td>\n      <td>190960.725144</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>1465</td>\n      <td>194118.222821</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "submission_df.head()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-07-21T08:45:37.861405Z",
     "start_time": "2025-07-21T08:45:37.854797Z"
    }
   },
   "id": "e3d6d5286c7dc9f4",
   "execution_count": 25
  },
  {
   "cell_type": "markdown",
   "source": [
    "# Boosting"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "3d9e397e496f3300"
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n",
      "C:\\ProgramData\\anaconda3\\Lib\\site-packages\\sklearn\\ensemble\\_base.py:166: FutureWarning: `base_estimator` was renamed to `estimator` in version 1.2 and will be removed in 1.4.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "data": {
      "text/plain": "[<matplotlib.lines.Line2D at 0x1df2e62df90>]"
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 1 Axes>",
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.ensemble import BaggingRegressor\n",
    "params = [10,15,20,25,30,35,40,45,50]\n",
    "test_scores =[]\n",
    "for param in params:\n",
    "    clf = BaggingRegressor(n_estimators=param,base_estimator=ridge)\n",
    "    test_score = np.sqrt(-cross_val_score(clf, x_train, y_train, cv=10, scoring='neg_mean_squared_error'))\n",
    "    test_scores.append(np.mean(test_score))\n",
    "\n",
    "plt.plot(params, test_scores)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-07-21T08:46:30.607425Z",
     "start_time": "2025-07-21T08:45:37.862405Z"
    }
   },
   "id": "f5830dd908789d82",
   "execution_count": 26
  },
  {
   "cell_type": "markdown",
   "source": [
    "# xgBoost"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "7cfe712ff7d52289"
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "from xgboost import XGBRegressor\n",
    "\n",
    "params = [1,2,3,4,5,6]\n",
    "\n",
    "test_scores = []\n",
    "for param in params:\n",
    "    clf = XGBRegressor(max_depth=param)\n",
    "    test_score = np.sqrt(-cross_val_score(clf, x_train, y_train, cv=10, scoring='neg_mean_squared_error'))\n",
    "    test_scores.append(np.mean(test_score))"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-07-21T08:46:37.850222Z",
     "start_time": "2025-07-21T08:46:30.608425Z"
    }
   },
   "id": "721505adf0572259",
   "execution_count": 27
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 1 Axes>",
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(params, test_scores)\n",
    "plt.title(\"max_depth vs CV Error\");"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-07-21T08:46:37.996649Z",
     "start_time": "2025-07-21T08:46:37.851221Z"
    }
   },
   "id": "4de570dd3ecb7b91",
   "execution_count": 28
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "[0.13698126393833465,\n 0.1293036803513589,\n 0.12802384370602182,\n 0.1328118167211933,\n 0.13415855322556663,\n 0.13785847210600494]"
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_scores"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-07-21T08:46:38.001387Z",
     "start_time": "2025-07-21T08:46:37.997649Z"
    }
   },
   "id": "2d7d92b60c9bc588",
   "execution_count": 29
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-07-21T08:46:38.004481Z",
     "start_time": "2025-07-21T08:46:38.002387Z"
    }
   },
   "id": "16f395a9a57bb284",
   "execution_count": 29
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:base] *",
   "language": "python",
   "name": "conda-base-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
